/**
 * 扩展点组件
 * 对于特定用以扩展的接口,动态生成代理类,代理类运行时,根据参数中的场景码进行动态路由到适配的实现中
 *
 * <p>
 * 使用spring方式请自行引入spring相关依赖
 * <dependency>
 * <groupId>org.springframework.boot</groupId>
 * <artifactId>spring-boot-autoconfigure</artifactId>
 * </dependency>
 * <dependency>
 * <groupId>org.springframework</groupId>
 * <artifactId>spring-aop</artifactId>
 * </dependency>
 * <dependency>
 * <groupId>org.aspectj</groupId>
 * <artifactId>aspectjweaver</artifactId>
 * </dependency>
 * <p>
 * <p>
 * 基础使用方式
 * 1.定义扩展点选择器
 * public class TestSelector implements ExtensionSelector{
 * public String selectTag(Method method,Object[] args){
 * if("aBiz".equas(method.getName())){
 * return "a";
 * }
 * //业务判断
 * throw new RuntimeException("不支持的场景");
 * }
 * }
 * 1.定义扩展点接口
 * public interface TestExt{
 * void doSomething(String param);
 * }
 * 4.new ExtensionFactory实例并发布扩展点 ExtensionFactory.publishExtension
 * 5.编写扩展点实现并注入工厂ExtensionFactory.installExtensionImpl
 * public class AImpl implements TestExt{
 * public void doSomething(String param){
 * //doSomething
 * }
 * }
 * 6.ExtensionFactory.getExtensionProxy获取动态代理
 * 7.使用代理
 * <p>
 * <p>
 * spring使用方式:
 *
 * @Extension(selector=TestSelector.class) 3.编写对应的扩展点实现-同上
 * 并在实现类上添加注解声明此接口是扩展实现
 * @ExtensionImpl("a") 4.注入spring
 * 启动类添加注解@EnableExtension(extensionTypes={TestExt.class})
 * <p>
 * 5.其他bean中直接引用代理对象使用
 * public class ExtService{
 * @Autowired private TestExt testExt;
 * //直接使用
 * }
 * @see @EnableExtension
 * @see @Extension
 * <p>
 * 1.定义扩展点选择器-同上
 * 2.定义扩展点接口-同上 并在接口上添加注解声明此接口是扩展点接口,配置扩展实现类
 */
package com.wang.tool.extension;
